package LineCode.Recruit2017.网易;

import java.util.*;

/**
 * 题目描述
 * 小易来到了一条石板路前，每块石板上从1挨着编号为：1、2、3.......
 * 这条石板路要根据特殊的规则才能前进：对于小易当前所在的编号为K的 石板，
 * 小易单次只能往前跳K的一个约数(不含1和K)步，即跳到K+X(X为K的一个非1和本身的约数)的位置。
 * 小易当前处在编号为N的石板，他想跳到编号恰好为M的石板去，小易想知道最少需要跳跃几次可以到达。
 *
 * 例如：
 * N = 4，M = 24：
 * 4->6->8->12->18->24
 * 于是小易最少需要跳跃5次，就可以从4号石板跳到24号石板
 * 输入描述:
 * 输入为一行，有两个整数N，M，以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)

 * 输出描述:输出小易最少需要跳跃的步数,如果不能到达输出-1
 * 示例
 *      输入4 24
 *      输出5
 *
 *
 * 掉的坑：
 * 1.使用(m == n) ( [-128, 127] 时相等 )
 */
public class 挑石板 {

    public static void main(String[] args) {

        //输入
        Scanner sc = new Scanner(System.in);
        Integer n = sc.nextInt();
        Integer m = sc.nextInt();
        Integer result = -1;

        //处理
        if (m.equals(n)) {
            System.out.println(0);
        } else {
            int step[] = new int[m + 1];
            step[n] = 0;
            for (int i = n; i < m; i++) {
                Set<Integer> factor = getFactor(i);
                for (Integer j : factor) {
                    if (i % j == 0 && j <= m - i) {
                        if (step[j + i] > step[i] + 1 || step[i + j] == 0 && (step[i] != 0 || i == n)) {
                            step[j + i] = step[i] + 1;
                        }
                    }
                }
            }

            //输出
            if (step[m] == 0)
                System.out.println(-1);
            else
                System.out.println(step[m]);
        }

    }

    private static Set<Integer> getFactor(Integer n) {
        Set<Integer> res = new HashSet<>();
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                res.add(i);res.add(n/i);
            }
        }
        return res;
    }
}
